package com.hernie.piggymall.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

/**
 * @author HuangJp
 * @date 2022/2/25
 */
@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsWebFilter(){
        //构造CorsWebFilter需要传入一个CotsConfigurationSorcery接口
        // 基于url跨域
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        //跨域文件配置
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //配置跨域请求，
        //允许哪些头进行请求跨域
        corsConfiguration.addAllowedHeader("*");
        //允许哪些方法进行请求跨域  可设置* 即允许全部http请求方法类型
        corsConfiguration.addAllowedMethod("*");
        //允许哪些源进行请求跨域
        // #允许向该服务器提交请求的URI，*表示全部允许，在SpringMVC中，如果设成*，会自动转成当前请求头中的Origin
        corsConfiguration.addAllowedOrigin("*");
        // 允许cookies跨域
        corsConfiguration.setAllowCredentials(true);
        // 预检请求的缓存时间（秒），即在这个时间段里，对于相同的跨域请求不会再预检了
        corsConfiguration.setMaxAge(18000L);
        //注册跨域信息
        source.registerCorsConfiguration("/**",corsConfiguration);
        //构造source信息
        return new CorsWebFilter(source);
    }
}

